var express = require('express')
var User = require('./models/user')
var Topic = require('./models/topic')
var md5 = require('blueimp-md5')


var router = express.Router()

router.get('/', function (req, res) {
   Topic.find(function (err, data) {
        if (err) {
            return res.status(500).end('Server Error')
        }  
        let PageCode = []
        let length = Math.ceil(data.length / 6)
        for (var i = 1; i <= length; i++) {
            PageCode.push(i)
        }  
    var data = data.slice(0, 6)   //获取 PageCode数组里 索引为0~6之间的数
    res.render('index.html', {
        user: req.session.user,
        topic:data,
        pageCode:PageCode
    })
  })
})

router.get('/page/choose', (req, res) => {
    const num = parseInt(req.query.num, 10)
    // console.log(num)
    const startNum = (num - 1) * 6
    const endNum = startNum + 6
    Topic.find(function (err, data) {
       if (err) {
        return res.status(500).send('Server Error')    
       } 
       var data = data.slice(startNum, endNum)
       res.json({
           topic: data
       })
    })
})

router.get('/login', function (req, res) {
    res.render('login.html')
})

router.post('/login', function (req, res) {
      // 获取表单数据
    // 查询数据库用户名密码是否正确
    // 发送响应数据
    var body = req.body
    User.findOne({
        email: body.email,
        password: md5(md5(body.password))
    }, function (err, user) {
        if (err) {
            return res.status(200).json({
                err_code: 500,
                message: err.message
            })
        }

          // 如果邮箱和密码匹配，则 user 是查询到的用户对象，否则就是 null
        if (!user) {
            return res.status(200).json({
                err_code: 1,
                message:  'Email or password is invalid.'
            })
        }
      // 用户存在，登陆成功，通过 Session 记录登陆状态
        req.session.user = user

        res.status(200).json({
            err_code: 0,
            message: 'OK'
        })
    })
})

router.get('/register', function (req, res) {
    res.render('register.html')
})

router.post('/register', function (req, res) {
    // 1.获取表单提交的数据
    // req.body
    // 2.操作数据库
    // 判断用户是否存在
    // 如果已存在， 不允许注册
    // 如果不存在， 注册新建用户 
    // 3.发送响应
    var body = req.body 
    User.findOne({
        $or: [{
                email: body.email
            },
            {
                nickname: body.nickname
            }
        ]
    }, function (err, data) {
      if (err) {
          return res.status(500).json({
              success: false,
              message: '服务端错误'
          })
      }
      if (data) {
        // 邮箱或者昵称已存在  
        return res.status(200).json({
            err_code: 1,
            message: 'Email or nickname aleady exists.'
        })
        return res.send(`邮箱或者密码已存在，请重试`)
       
      } 

    //   /对密码进行 md5 重复加密
      body.password = md5(md5(body.password))

      new User(body).save(function (err, user) {
          if (err) {
              return res.status(500).json({
                  err_code: 500,
                  message: 'Internal error.'
              })
          }

          // 注册成功，使用 Session 记录用户的登陆状态
          req.session.user = user
           // Express 提供了一个响应方法：json
      // 该方法接收一个对象作为参数，它会自动帮你把对象转为字符串再发送给浏览器
          res.status(200).json({
              err_code: 0,
              message: 'OK'
          })

          // 服务端重定向只针对同步请求才有效，异步请求无效
      // res.redirect('/')
      })
     
    })
})

router.get('/logout', function (req, res) {
    // 清楚登录状态
    req.session.user = null
    // 重定向到登录页
    res.redirect('/login')
})

router.get('/settings/profile', function (req, res) {

       res.render('settings/profile.html',{
           user:req.session.user
        })
    })

router.post('/settings/profile', function (req, res) {
        var body = req.body
	body.birthday = body.birthday + ''
	User.findByIdAndUpdate(req.session.user.id,body,function(err, data) {
		if(err) {
			return res.json({
                err_code: 500,
                // message: err.message
			})
		}
		// req.session.user = data
        // console.log(req.session.user)
		res.json({
            err_code:0,
            message: "ok" 
        })

	})
    })

router.get('/settings/admin', function (req, res) {
        res.render('settings/admin.html', {user:req.session.user})
     })

router.get('/topics/new', function (req, res) {
       res.render('topics/new.html', {user:req.session.user})
    //    console.log(req.session)
    })

router.post('/topics/new', function (req, res) {
    var body = req.body
    new Topic(body).save(function (err, data) {
        if(err) {
			return res.end('Server Error');
        }
        res.redirect('/')
    })

})

router.get('/topics/show', function (req, res) {
    Topic.findOne({_id: req.query.id}, function (err, data) {
        if (err) {
            throw(err)
        }
        res.render('topics/show.html', {
            topic: data
        })
    })
})



    

module.exports = router